package com.unknowpupil.design.relation;

/**
 * @Description: 关联(Association）
 * <p>
 *     关联关系，是类与类之间的联接，它使一个类知道另一个类的属性和方法。
 *     拥有关系。
 *          关联可以是双向的，也可以是单向的。在Java语言中，关联关系一般使用成员变量来实现。
 * </p>
 * @Author: <a> w10g </a>
 * @CreateDate: Create in 2020/4/24 11:34
 * @Classname: AssociationSchema
 * @Version: 1.0
 */
public class SchemaAssociation {
    /**
     * 菜刀
     */
    static class Kinfe {
        public static void cutting(String name) {
            System.out.println("切" + name);
        }
    }

    /**
     *  厨师
     *  菜刀关联在厨师里面
     *
     */
    class Chef {
        private Kinfe kinfe;

        public Chef(Kinfe kinfe){
            this.kinfe=kinfe;
        }

        public void cutting(Kinfe kinfe, String vegetables) {
            kinfe.cutting(vegetables);
        }

    }

    public static void main(String[] args) {
        SchemaAssociation associationSchema = new SchemaAssociation();


        Kinfe kinfe = new Kinfe();

        Chef chef = associationSchema.new Chef(kinfe);

        chef.cutting(kinfe,"牛肉");


    }


    /**
     * =========另一种方式
     * =======
     * ====
     *  关联（Association）：
     * 是一种结构关系，说明一个事物的对象与另一个事物的对象相联系。
     * 给定有关联的两个类，可以从一个类的对象得到另一个类的对象。
     * 关联有两元关系和多元关系。
     * 两元关系是指一种一对一的关系，多元关系是一对多或多对一的关系。
     * 两个类之间的简单关联表示了两个同等地位类之间的结构关系。
     * 当你想要表示结构化关系时使用关联。
     *
     * 关联关系(Association) 是类与类之间最常用的一种关系，
     * 它是一种结构化关系，用于表示一类对象与另一类对象之间有联系。
     * • 在UML类图中，用实线连接有关联的对象所对应的类，在使用Java、C#和C++等编程语言实现关联关系时，通常将一个类的对象作为另一个类的属性。
     *
     * 在使用类图表示关联关系时可以在关联线上标注角色名。
     */
    /**
     * 双向关联
     */
    public class Customer
    {
        private Product[] products;
    //……
    }
    public class Product
    {
        private Customer customer;
    //……
    }
    /**
     * 单向关联
     */
    public class Customer1
    {
        private Address1 address;
    //……
    }

    public class Address1
    {
    //……
    }

    /**
     * 自关联
     */
    public class Node
    {
        private Node subNode;
    //……
    }


}
